package org.eiahe.hr.salary.domain.vo;

import cn.idev.excel.annotation.ExcelIgnore;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;

/**
 * 员工薪资视图对象（用于员工端查询，敏感信息已模糊处理）
 *
 * @author zhangnn
 */
@Data
@ExcelIgnoreUnannotated
public class EmployeeSalaryVo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 薪资构成ID
     */
    @ExcelProperty(value = "薪资构成ID")
    private Long structureId;

    /**
     * 工号
     */
    @ExcelProperty(value = "工号")
    private String employeeNo;

    /**
     * 员工姓名
     */
    @ExcelProperty(value = "员工姓名")
    private String employeeName;

    /**
     * 部门
     */
    private String department;
    @ExcelProperty(value = "部门")
    private String departmentName;

    /**
     * 年月(yyyyMM格式)
     */
    @ExcelProperty(value = "年月")
    private String yearMonth;

    /**
     * 职工级别
     */
    @ExcelProperty(value = "职工级别")
    private String jobLevelSalary;

    /**
     * 基本工资（模糊处理）
     */
    @ExcelProperty(value = "基本工资")
    private String baseSalary;

    /**
     * 岗位工资（模糊处理）
     */
    @ExcelProperty(value = "岗位工资")
    private String positionSalary;

    /**
     * 绩效工资（模糊处理）
     */
    @ExcelProperty(value = "绩效工资")
    private String performanceSalary;

    /**
     * 职务津贴（模糊处理）
     */
    @ExcelProperty(value = "职务津贴")
    private String dutyAllowance;

    /**
     * 应出勤天数
     */
    @ExcelProperty(value = "应出勤天数")
    private Integer shouldAttendanceDays;

    /**
     * 缺勤天数
     */
    @ExcelProperty(value = "缺勤天数")
    private Integer absenceDays;

    /**
     * 计薪出勤天数
     */
    @ExcelProperty(value = "计薪出勤天数")
    private Integer paidAttendanceDays;

    /**
     * 缺勤扣款（模糊处理）
     */
    @ExcelProperty(value = "缺勤扣款")
    private String absenceDeduction;

    /**
     * 误餐补助（模糊处理）
     */
    @ExcelProperty(value = "误餐补助")
    private String mealAllowance;

    /**
     * 其他调整(扣款-/奖金+/其他)（模糊处理）
     */
    @ExcelProperty(value = "其他调整")
    private String otherAdjustment;

    /**
     * 餐费扣款（模糊处理）
     */
    @ExcelProperty(value = "餐费扣款")
    private String mealDeduction;

    /**
     * 应发合并（模糊处理）
     */
    @ExcelProperty(value = "应发合并")
    private String grossSalary;

    /**
     * 养老扣款（模糊处理）
     */
    @ExcelProperty(value = "养老扣款")
    private String pensionDeduction;

    /**
     * 失业扣款（模糊处理）
     */
    @ExcelProperty(value = "失业扣款")
    private String unemploymentDeduction;

    /**
     * 医疗扣款（模糊处理）
     */
    @ExcelProperty(value = "医疗扣款")
    private String medicalDeduction;

    /**
     * 大额医疗扣款（模糊处理）
     */
    @ExcelProperty(value = "大额医疗扣款")
    private String majorMedicalDeduction;

    /**
     * 社保个人扣款（模糊处理）
     */
    @ExcelProperty(value = "社保个人扣款")
    private String socialInsurancePersonal;

    /**
     * 公积金扣款（模糊处理）
     */
    @ExcelProperty(value = "公积金扣款")
    private String housingFundPersonal;

    /**
     * 社保公积金合计（模糊处理）
     */
    @ExcelProperty(value = "社保公积金合计")
    private String socialHousingTotal;

    /**
     * 税前工资（模糊处理）
     */
    @ExcelProperty(value = "税前工资")
    private String taxableSalary;

    /**
     * 个人所得税（模糊处理）
     */
    @ExcelProperty(value = "个人所得税")
    private String personalTax;

    /**
     * 实发工资（模糊处理，如 *****）
     */
    @ExcelProperty(value = "实发工资")
    private String netSalary;

    /**
     * 创建时间
     */
    @ExcelProperty(value = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * 更新时间
     */
    @ExcelProperty(value = "更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    /**
     * 数据是否已脱敏
     */
    @ExcelIgnore
    private Boolean isMasked = true;
}
